接口
- 接口用来描述类具有什么功能,而并不给出每个功能的具体实现。
- 接口中的所有方法自动地属于public,所以在接口中声明方法的时候,不必提供关键字public。而在实现接口的时候,必须将方法声明为public。
- 接口绝对不能含有实例域,也不能在接口中实现方法。
- 任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。
- 不能构造接口的对象(x = new Comparable(…) //ERROR),但是可以声明接口的变量(Comparable x; //OK);接口变量必须引用实现了接口的类对象。
- 接口中虽然不能包含实例域与或者静态方法,但却可以包含常量,与接口中的方法都自动地被设置为public一样,接口中的域将被自动设为public static final。
- 尽管每个类只能拥有一个超类,但是却可以实现多个接口,使用逗号将实现的各个接口分隔开。
- 之所以同时存在接口与抽象类,是因为7所述。同时,Java不支持多继承,接口可以提供多重继承的大多数好处。
对象克隆
到拷贝一个变量时,原始变量与拷贝变量引用同一个对象。
假如想创建一个对象的copy,且最初状态与original一样,而以后也可以各自改变状态的话,就需要使用clone方法。
clone方法是Object类的一个protected方法。
若原始对象与浅克隆对象共享的子对象是不可变的,浅拷贝不会产生任何问题。(如:子对象属于String类这种不允许改变的类)同时,假如子对象在生命周期内不发生变化也没问题。
即使clone的默认实现(浅拷贝)能够满足需求,也应该实现Cloneable接口,将clone重定义为public,并调用super.clone();
例:
1234567class Employee implements Cloneable{public Employee clone() throws CloneNotSupportedException{return (Employee)super.clone();}}